<template>
<!--  注意格式 ！！！！  ref一般绑定给子组件,div也可以直接绑定ref,用于拿元素-->
  <div class="wrapper" ref="wrapper">
    <div class="content">
      <slot></slot>
    </div>
  </div>
</template>

<script>
  //better-scroll丝滑滚动封装()
  import BScroll from 'better-scroll'

  export default {
    name: "Scroll",
    //是否实时监听 是否需要上拉加载(以及如何加载)由用户自己决定
    props: {
      probeType: {
        type: Number,
        default: 0
      },
      pullUpLoad: {
        type: Boolean,
        default: false
      }
    },
    data() {
      return {
        scroll: null,
        message: '哈哈哈'
      }
    },
    mounted() {
      // 1.创建BScroll对象  用document.querySelector 类名 也可以 不如下面的好
      //this.$refs.wrapper 唯一性
      this.scroll = new BScroll(this.$refs.wrapper, {
        //点击事件
        click: true,
        //实时监听滚动的位置
        probeType: this.probeType,
        //上拉加载更多
        pullUpLoad: this.pullUpLoad
      })

      // 2.监听垂直滚动的位置
      this.scroll.on('scroll', (position) => {
        // console.log(position);
        //为什么要传出去？position不是给自己使用的
        //需要把position 传出去给FirPage 并实现对应方法
        this.$emit('scroll', position)
      })
      // 3.监听上拉事件 (用于加载更多) ★★★★★
      this.scroll.on('pullingUp', () => {
        //为什么要传出去?因为该组件无法调用axios网络请求
        this.$emit('pullingUp')
      })
    },
/*  如果父组件直接调用子组件的方法时候 无需子传父  直接 this.refs.scroll.方法名即可
    如果子组件的方法获取的数据父组件里需要使用或者要父组件需要改方法做别的事情的时候
    比如网络请求,则需要发射给父组件,父组件实现之,并加入网络请求  */
    methods: {
      //2. time 滚回去需要多久
      scrollTo(x, y, time) {
        //谁的方法？new BScroll的方法  逻辑与
        this.scroll&&this.scroll.scrollTo(x, y, time)
      },
     // 3.用于上拉重复加载更多 函数名固定
      finishPullUp() {
         this.scroll.finishPullUp()
      },

     refresh(){
       console.log("******123")
       this.scroll&&this.scroll.refresh();
     },

      //离开时y的滚动距离
      GetScrollY(){
        //有值返回无返回0
        return this.scroll.y ? this.scroll.y:0
      }
    }

  }
</script>

<style scoped>

</style>
<!--


-->